<!DOCTYPE html>
<html lang="en">
	<head>
		<title>nTube: Changelog</title>
		<meta charset="UTF-8" />
		<meta name="application-name" content="nTube" />
		<meta name="theme-color" content="#282828" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<meta name="iwebkit-use-fruit-styled-layout" value="true;version=1" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
		<meta name="robots" content="noindex, nofollow" />
		<meta name="apple-mobile-web-app-capable" content="yes" />
		<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
		<meta name="description" content="nTube: Changelog." />
		<link rel="preload" href="resources/promise-queues.js" as="script" />
		<link rel="preload" href="resources/libWeb.js" as="script" />
		<link rel="preload" href="resources/base.js" as="script" />
		<link rel="preload" href="resources/settings.js" as="script" />
		<link rel="preload" href="resources/search.js" as="script" />
		<script src="resources/promise-queues.js"></script>
		<script src="resources/libWeb.js"></script>
		<script src="resources/base.js"></script>
		<script src="resources/settings.js"></script>
		<script src="resources/search.js"></script>
		<link rel="apple-touch-icon" href="/resources/logos/ntube-logo-192.png" />
		<link rel="stylesheet" type="text/css" href="resources/base.css" />
		<link rel="stylesheet" type="text/css" href="resources/search.css" />
		<style id="poly-item-css">
			.poly-item {
				padding-left: 5px;
				box-shadow: 0 14px 28px rgba(255, 255, 255, 0.11), 0 10px 10px rgba(255, 255, 255, 0.08);
				border: 1px solid white;
				margin-bottom: 10px;
			}
		</style>
		<style id="body-css">
			body {
				background-color: black;
				color: white;
			}
		</style>
		<style>
			* {
				-webkit-font-smoothing: antialiased;
				-moz-osx-font-smoothing: grayscale;
			}

			.menu {
				position: fixed;
				top: 0;
				margin: auto;
				left: 0;
				right: 0;
				width: 100%;
				height: 32px;
				border-bottom: 1px solid green;
				margin-right: 0px;
				z-index: 15;
				display: flex;
			}

			.menu-item {
				flex: 1;
				max-width: 50%;
				overflow: hidden;
				white-space: nowrap;
			}

			.poly-item-light {
				padding-left: 5px;
				box-shadow: 0 14px 28px rgba(0, 0, 0, 0.15), 0 10px 10px rgba(0, 0, 0, 0.12);
				border: 1px solid black;
				margin-bottom: 10px;
			}
		</style>
		<style id="_css_fonts">
			html {
				font-family: -apple-system, BlinkMacSystemFont, "Product Sans", "Google Sans", "Segoe UI", "Arial", "Roboto", sans-serif;
			}
		</style>
		<div class="menu">
			<div class="menu-item">
				<p style="padding-left: 5px; margin-top: 5px; vertical-align: middle; font-weight: bold; display: inline-block; margin-right: 15px; width: auto">
					<span style="color: red">n</span><span id="ntube_main_menu_tube_label" style="color: lightgreen">Tube</span>
					<sub id="ntube_version_main_menu_label" style="font-size: 0.9em; line-height: 25%">1.5.0</sub>
					<img id="ntube-winter-logo" src="resources/events/christmas.png" title="Merry Christmas!" decoding="async" />
				</p>
				<div style="display: inline-block; vertical-align: middle; margin-right: 5px">
					<a href="/" title="Home Page">
						<img src="resources/icons/home.svg" alt="home" style="height: 2em; width: 2em" decoding="async" />
					</a>
				</div>
				<div style="display: inline-block; vertical-align: middle; margin-right: 5px">
					<a href="/trending" title="Trending Videos">
						<img src="resources/icons/trending.svg" alt="trending" style="height: 2em; width: 2em" decoding="async" />
					</a>
				</div>
				<div style="display: inline-block; vertical-align: middle; margin-right: 5px; margin-bottom: 3px">
					<a href="/settings" title="Settings">
						<img src="resources/icons/settings.svg" alt="settings" style="height: 2em; width: 2em" decoding="async" />
					</a>
				</div>
			</div>
			<div class="menu-item">
				<div style="height: 100%; display: flex">
					<style>
						#search_overlay {
							z-index: 8;
							position: fixed;
							background-color: rgba(0, 0, 0, 0.95);
							width: 100%;
							height: 100%;
							top: 0px;
							left: 0px;
						}

						.search_hidden {
							display: none;
							visibility: hidden;
						}

						#search_bar {
							background-color: inherit;
							color: inherit;
							border: none;
							border-left: 1px solid green;
							height: 100%;
							transition: border-bottom 0.5s ease-in-out;
							font-family: monospace;
							font-size: large;
							text-indent: 5px;
							flex-grow: 1;
							min-width: 50%;
						}

						#search_bar:focus {
							border-bottom: 1px solid green;
						}

						#search_button {
							border: none;
							border-left: 1px solid rgba(0, 128, 0, 0.7);
							border-right: none;
							height: 100%;
							background-color: inherit;
							color: inherit;
							margin-right: 0px;
							font-family: inherit;
						}
					</style>
					<input id="search_bar" type="text" name="Search nTube Bar." placeholder="Search nTube." />
					<button id="search_button" onclick="search_start(null);">Search</button>
				</div>
			</div>
			<script>
				run_async(function () {
					SearchBar.init();
					id("_search_results").innerHTML = "";
				});
			</script>
		</div>
		<div id="search_overlay" class="search_hidden">
			<div style="padding-bottom: 30px"></div>
			<!--search_hidden-->
			<div id="search-top-ui" style="width: 100%; color: white">
				<div style="float: left; padding-left: 5px">
					<h1 style="margin-top: 5px; margin-bottom: 5px">Search.</h1>
					<h3 style="margin-top: 5px; margin-bottom: 10px">Searching for <span id="search_query_display_string">uhhh...nothing.</span>.</h3>
				</div>
				<div style="float: right; padding-right: 15px; padding-top: 15px">
					<button style="width: 100px; height: 50px; border-radius: 30px; border: 1px solid green; background-color: inherit; color: inherit; font-family: inherit" onclick="search_close()">Close.</button>
					<script>
						function search_close() {
							id("search_overlay").classList.add("search_hidden");
						}
					</script>
				</div>
				<div style="clear: both"></div>
			</div>
			<div id="_search_results" class="poly-item" style="width: calc(100% - 30px); height: 78%; margin-right: 0px; overflow-y: auto; color: white; margin-left: 5px">
				<div class="search-item">
					<a class="search-link" href="#gotoShittyVideo">
						<img src="" alt="TOTALLY NOT CLICKBAIT" style="padding-left: 5px; display: inline; vertical-align: middle; width: 220 px; height: 160px; margin-bottom: 5px" />
						<div style="padding-left: 15px; display: inline; vertical-align: middle">
							<p style="position: absolute; display: inline; vertical-align: middle; font-size: large; margin-top: 15px">CLICKBAIT TITLE</p>
							<p style="position: absolute; display: inline; vertical-align: bottom; font-size: small; margin-top: 45px">00:00 &centerdot; -1 &centerdot; <a href="#gotoShittyChannel">CHANNEL #2492049</a></p>
						</div>
					</a>
				</div>
			</div>
			<center>
				<button id="_search_load_more">Load more.</button>
			</center>
			<script>
				run_promise(function () {
					id("_search_results").innerHTML = "";
				});
			</script>
		</div>
		<div style="padding-bottom: 30px"></div>
	</head>

	<body>
		<h1 style="margin-top: 0px; margin-bottom: 10px">Changelog.</h1>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.9</h3>
			<p>This is a hotfix for 1.5.8.</p>
			<p>Changes:</p>
			<ul>
				<li>Stability improvements.</li>
				<li>
					Removed Shaka Player as a playback engine option.
					<br />
					Shaka's UI was also removed.
				</li>
				<li>
					Upgraded nTube's rx-player copy to the 4.x branch. <br />
					<i>IE 11 users may have to switch to a different engine or use legacy playback.</i>
				</li>
				<li>Fixed comment replies not working.</li>
				<li>Fixes to the frontpage experiment.</li>
				<li>Fixes for upcoming changes to the channel page.</li>
				<li>Improved YouTube client spoofing.</li>
				<li>
					Added customization for instance hosts to simplify their instance down to two extra modes:
					<ul>
						<li>Embedded page only</li>
						<li>Invidious compatibility layer only</li>
					</ul>
				</li>
				<li>Fixed the changelog page not respecting custom CSS rules.</li>
				<li>Fixed intermittent channel title extraction issues.</li>
				<li>Integrated automatic data saving into the video page.</li>
				<li>
					Fixes for legacy browser playback. <br />
					<i>Firefox 28 now falls back to legacy playback engines correctly.</i>
				</li>
				<li>
					Playlists: Removed the "Skip Current Video" button due to it not aligning properly.
					<br />
					<i>You can click/tap on the thumbnail like the other sections to skip to the next playlist entry.</i>
				</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.8</h3>
			<p>This is a hotfix for 1.5.7.</p>
			<p>Changes:</p>
			<ul>
				<li>Heatmaps have been enabled.</li>
				<li>Internal cleanup of (long) unused files and features.</li>
				<li>Updated rxPlayer to the latest version.</li>
				<li>
					Un-deprecated dash.js (a playback engine option) from removal. <br />
					The following changes have been made instead:
					<ul>
						<li>Deprecated Shaka Player.</li>
						<li>Deprecated Shaka Player + Shaka UI.</li>
					</ul>
				</li>
				<li>Removed Plyr + dash.js as a playback engine option.</li>
				<li>Removed the frontend for nTV.</li>
				<li>Fix nTube not working on Java 17.</li>
				<li>
					Improved the built-in Network Throughput test.
					<br />
					<i>It now utilizes a Throughput+RTT algorithm.</i> <br />
					<i>Requires HTML5 WebSockets.</i>
				</li>
				<li>Fixed the timestamp query parameter not functioning.</li>
				<li>Switched to the new DASH MPD generator by default.</li>
				<li>
					Labelled nPlayerNX as a legacy playback engine.
					<br />
					<i>nPlayerNX isn't going away anytime soon.</i>
				</li>
				<li>
					Fix YouTube livestream chat.
					<br />
					<i>nTube now injects itself into YouTube's chat to provide proxying.</i>
				</li>
				<li>Minor re-organization of the About page.</li>
				<li>Added a workaround for HLS playback on Android.</li>
				<li>Fixed DVR content detection.</li>
				<li>Fixed the updated metadata option not functioning.</li>
				<li>Fixed subtitles not working on IE 11.</li>
				<li>Fully fixed fallback video playback on WebKit (iOS/Safari/BB10) devices.</li>
				<li>Added a workaround for YouTube returning only a continuation for related videos.</li>
				<li>Added support for codec switching in MPEG-DASH.</li>
				<li>Fixed comments not working due to a new mutation-based payload being used.</li>
				<li>Livestream chat now dynamically adjusts to screen width, fixing chat on mobile devices.</li>
				<li>
					Added volume tracking.
					<br />
					nTube now remembers your set volume for the current session, making music playback more bearable.
				</li>
				<li>Sandboxing enhancements to livestream chat.</li>
				<li>nTube now better spoofs YouTube clients.</li>
				<li>Updated hls.js to the latest version.</li>
				<li>Updated dash.js to the latest version.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.7</h3>
			<p>This is a hotfix for 1.5.6.</p>
			<p>Changes:</p>
			<ul>
				<li>
					Completed the Data Saver option. <br />
					The following rules apply when enabled: <br />
					<ul>
						<li>Images are forced to lower resolution variants.</li>
						<li>nPlayer prefers 360p quality.</li>
						<li>DASH players are restricted to: 720p for AV1, 480p for VP9 and 360p for H.264.</li>
						<li>The option "Use AV1 only for low resolutions" is ignored when Data Saver is enabled.</li>
					</ul>
				</li>
				<li>
					Improvements to nPlayerNX on very old browsers.
					<br />
					These improvements apply to the following browsers: <br />
					<ul>
						<li>Firefox 39 and older. (tested on Firefox 28)</li>
					</ul>
				</li>
				<li>Fixed channels not being able to load more than the initial page.</li>
				<li>Fixed the V8 cipher failing at larger object names.</li>
				<li>Fixed YouTube's consent page causing issues with extraction and playlists.</li>
				<li>Fixed a regression breaking Custom CSS due to custom filters being introduced.</li>
				<li>
					Added an experimental option for iOS/iPadOS users to allow proper video playback. <br />
					<i>This enables bitrate switching and non-fallback streams, resolutions and frame-rates vary between videos.</i>
				</li>
				<li>Proxying improvements for live streams.</li>
				<li>Removed the "Use the Plyr engine for legacy playback" option.</li>
				<li>Fixed related breaking due to an upcoming YouTube change.</li>
				<li>Fixed livestream chat throwing an invalid Content-Encoding error...[sigh]</li>
				<li>Import some fixes from the 1.6 internal branch.</li>
				<li>Redwood: Added the ability to automatically update the player CSS when enabled.</li>
				<li>Implemented video request rate-limiting.</li>
				<li>Removed support for pre-ABI 2.2 extractors in YouTubeExtractor.</li>
				<li>Channel: Show upcoming content remaining time in the HH:MM:SS format.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.6</h3>
			<p>This is a hotfix for 1.5.5, on top of that this release marks the 5th anniversary of nTube, <i>help</i>.</p>
			<p>Changes:</p>
			<ul>
				<li>
					Prevent images from leaking the domain. <br />
					<i>A more modern browser (Chrome 52/Firefox 50) is required to stop this, I am NOT proxying images.</i>
				</li>
				<li>360-degree mode: Re-enable zooming.</li>
				<li>Further improvements to the internal proxy.</li>
				<li>
					Removed "no wrong think here". <br />
					<i>YouTube is a sinking ship anyway...</i>
				</li>
				<li>Fixed livestreams and livestream chat. (again n' again)</li>
				<li>Added an experimental option to randomly use multiple Google CDNs for video and audio playback.</li>
				<li>Minor tweaks to the Livestream Chat feature.</li>
				<li>Fixed rare endless sponsor skipping.</li>
				<li>Updated hls.js to the latest version.</li>
				<li>Low latency mode will be automatically enabled on low-latency streams.</li>
				<li>Minor wording tweaks.</li>
				<li>Converted the Browser Check into using FlexBox.</li>
				<li>Converted the Settings page into using FlexBox.</li>
				<li>UI tweaks for mobile users.</li>
				<li>Fixed the search overlay's CSS offsets.</li>
				<li>
					Removed nTube's self-hosted filters.
					<br />
					<i>
						These haven't been updated in a long time, <br />
						YouTube trends change night and day and trying to maintain an up to date list would be a hassle.
					</i>
				</li>
				<li>Implemented custom filters for nTube.</li>
				<li>
					Upgraded the fallback HTTPS certificate.
					<br />
					<i>
						This change allows for nTube to use more modern security standards.
						<br />
						You will need to re-add the certificate to your trusted chain.
					</i>
				</li>
				<li>
					Added an experimental Invidious compatibility layer.
					<br />
					<i>This requires launching nTube with the <code>--NTubeServer.enableInvidiousCompat</code> parameter.</i>
				</li>
				<li>Prefer AAC over Opus if the <code>SURROUND_AUDIO</code> flag is present.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.5</h3>
			<p>This is a hotfix for 1.5.4.</p>
			<p>Changes:</p>
			<ul>
				<li>Added an option to limit AV1 to low resolutions only.</li>
				<li>Channel: The community feed now supports loading more feed entries.</li>
				<li>Tweaks towards the menu UI.</li>
				<li>Channel: Show three video rows on wider monitors.</li>
				<li>Channel: Fix music channels.</li>
				<li>Video: Fix age-gate fallback not working. This should fix age-restricted videos on NFEE-based extractors.</li>
				<li>Downloads: Add an indicator if an audio track has Dynamic Range Compression present.</li>
				<li>Playlists: Show three video rows on wider monitors.</li>
				<li>
					Channel: Replace the content tab with the videos, live and shorts tabs.
					<br />
					<i>Oh and sorting videos by oldest to newest is also illegal apparently.</i>
				</li>
				<li>Search + nTubeifier: Improved support for YouTube URLs.</li>
				<li>
					Prefer AAC over Opus on Chrome OS and Mobile devices.
					<br />
					<i>Some mobile chipsets support offloading AAC decoding to their own hardware.</i>
				</li>
				<li>Force AAC on IE11 when using nPlayerNX.</li>
				<li>
					Updated rxPlayer to the latest version.
					<br />
					<i>Migration to v4.x is planned for a future date.</i>
				</li>
				<li>Updated Shaka to the latest version.</li>
				<li>
					Added a audio track switcher in the Playback Settings.
					<br />
					<i>This is currently only supported by rxPlayer.</i>
				</li>
				<li>Use smaller buffers on devices claiming less than 2 GB of RAM.</li>
				<li>
					Use Copyish as the default subtitle style.
					<br />
					<i>The legacy style is broken on modern browsers and there is no way around this, shame.</i>
				</li>
				<li>Convert the 1.6 UI prototype to use libWeb.</li>
				<li>Fix redirects not working.</li>
				<li>Improvements to the internal proxy.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.4</h3>
			<p>This is a hotfix for 1.5.3.</p>
			<p>Changes:</p>
			<ul>
				<li>Update rxPlayer and dash.js to their latest versions.</li>
				<li>Frontend: Migrate parts of base.js into libWeb.js</li>
				<li>Frontend: Use libWeb.js as a general wrapper for major functions.</li>
				<li>Channel: Promote the Community tab to stable.</li>
				<li>Video API: Remove BitChute support.</li>
				<li>Search: Redesigned the search UI, 1.4.4 called, it wanted its UI design back.</li>
				<li>v9: Add Rhino to the supported list of decipherers.</li>
				<li>v9: Prep-work for more robust v9 decipherer handling. (nice obfuscation lolol)</li>
				<li>Backend: Finish the HTTPS URLs migration.</li>
				<li>Frontend: Add more meta tags.</li>
				<li>Comments: Updated the UI, maybe comment replies are a thing...</li>
				<li>Video: Livestream/Video countdown now actually countdowns.</li>
				<li>Frontend: Various UI tweaks.</li>
				<li>Frontend: Enforce tabs for indentation, EVERYWHERE.</li>
				<li>Backend: Use tab indentation for MPEG-DASH, this should slightly reduce data use.</li>
				<li>Backend: Updates for YouTube's new UI (it sucks)</li>
				<li>Comments: Added support for viewing comment replies.</li>
				<li>Legacy Playback: Enabled MediaController support in nPlayerNX.</li>
				<li>Formatter: Fix slightly broken view counts</li>
				<li>General tweaks for slower connections (like 64 kB/s tier)</li>
				<li>Subtitles: Disable styling on Firefox until they support <span style="font-family: monospace">::cue(&lt;selector&gt;)</span></li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.3</h3>
			<p>This is a hotfix for 1.5.2.</p>
			<p>Changes:</p>
			<ul>
				<li>Update rxPlayer, dash.js and shaka to their latest versions.</li>
				<li>Disable indentation using the default JSON writer, this should reduce mobile data usage.</li>
				<li>Redwood: Add patch to remove v9 decipherer usage on YouTube's player.</li>
				<li>Redwood: Improve image tracking patch.</li>
				<li>Redwood: Update non-autoupdated player to 03-04-2022-redwood.</li>
				<li>Fix search not functioning.</li>
				<li>Fix channels not functioning.</li>
				<li>Frontend: Some work towards getting FlexBox (semi-)working on even older browsers.</li>
				<li>Video UI: Improve information section view on mobile browsers.</li>
				<li>Frontend: Fixes to make Opera 12.xx work more nicely.</li>
				<li>Frontend: Improve mobile browser CSS rules.</li>
				<li>Home page: Updated the subscriptions UI.</li>
				<li>Project Accessible: Improved DASH and UI elements for multi-audio track videos.</li>
				<li>MPEG-DASH: Added more features and improved conformance.</li>
				<li>Fix up the backend for heatmaps.</li>
				<li>Enable heatmaps and implement them in the frontend.</li>
				<li>Fix the 360 viewer not being 360.</li>
				<li>Service Worker: Fix it and make settings work.</li>
				<li>Service Worker: Use the SW for caching the PWA (making it work)</li>
				<li>Fix the birthday hat looking weird on the homepage.</li>
				<li>Backend: Improve overall stability.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.2</h3>
			<p>This is a hotfix for 1.5.1.</p>
			<p>Changes:</p>
			<ul>
				<li>
					frontend: Added "Asynchronous Microtasks" UI acceleration method. <br />
					This should make non-Blink browsers faster.
				</li>
				<li>Fix YT Shorts not showing up on channels.</li>
				<li>Disable YTIAPI..and re-enable YTIAPI... from being used as AGE_GATE, fixing age restricted content.</li>
				<li>Add support for handling CONTENT_CHECK_REQUIRED.</li>
				<li>Fix nTube Premium&trade;.</li>
				<li>Fixes for security hardened mode.</li>
			</ul>
			<p>Warnings/Notes:</p>
			<ul>
				<li>Asynchronous Microtasks can only be executed ~2147483647 times, a fix is being worked on.</li>
				<li>YouTube is on a full out war with third party clients right now...idk...challenge accepted?</li>
				<li>An uglier age-restriction bypass is being worked on, although a Google account will be a sacrifice.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.1</h3>
			<p>This is a hotfix for 1.5.0.</p>
			<p>Changes:</p>
			<ul>
				<li>Fixed breakages due to API changes, including channel extraction and livestream detection.</li>
				<li>Improved performance thanks to more optimizations.</li>
				<li>Reduced extraction time.</li>
				<li>Added a new UI for YouTube Music playback, this UI is only available on desktop.</li>
				<li>Stability and deadlocking fixes, 34th edition.</li>
				<li>Prep. work for Java 17 and higher support.</li>
				<li>Prep. work for video heatmaps and caption transcripts.</li>
				<li>Slight UI fixes for the fallback pages.</li>
				<li>Javascript-free backend: Added support for captions. (Styled too!)</li>
				<li>Updated the license to POSS 3.0</li>
				<li>Added on-going trial: Watch Later</li>
				<li>Made the frontpage trial accessible from the home page.</li>
				<li>Privacy improvements to SponsorBlock.</li>
				<li>Privacy improvements to the experimental RYTD implementation.</li>
				<li>Re-added audio only mode, it maintains pre-1.5 behaviour, meaning you must append &amp;audio to the URL.</li>
				<li>base.js: Added support for browsers that use User-Agent Client Hints.</li>
				<li>Added support for localized video text. (Video Titles for now)</li>
				<li>Added the ability to disable localized video text.</li>
				<li>Minor improvements to channel communities.</li>
				<li>Frontpage Trial: Add support for sections within the frontpage.</li>
				<li>Fallback pages: Fix menu CSS.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.5.0</h3>
			<center>
				<!--<iframe src="/embed?v=lqBhgEQ4LT0&autoplay=1" width="720px" height="360px" frameborder="0"></iframe>-->
				<i>You're a superstar, at the ___ ___.</i>
				<!--"Audio, Video, nTube."" was dropped during the release candidate branch.-->
			</center>
			<p>Hello World!</p>
			<p>This is the first public release of nTube outside of the private beta/alpha.</p>
			<p>Changes:</p>
			<ul>
				<li>
					UI: <br />
					- Redesigned the UI. <br />
					- This UI attempts to recreate the modern web look while also attempting to keep the snappiness of non-dynamic pages.
					<ul>
						<li>Made the menu bar static, easier navigation everywhere.</li>
						<li>Search is now accessible globally.</li>
						<li>Added icon shortcuts for Home, Trending and Settings.</li>
						<li>Added an experimental commander which allows the UI to be interfaced with a keyboard only.</li>
						<li>Improved UI performance with tweaks and caching of objects.</li>
						<li>Added partial support for mobile devices as the UI now scales to devices.</li>
						<li>Added UI scaling.</li>
						<li>Playlists now show more information and have a page to choose specific tracks.</li>
					</ul>
					- Moved the trending section into a section page. <br />
					- Switched over to nPlayer NX for legacy devices. <br />
					- nMuxer was introduced and put in the freezer as it was unstable, expect more development in the future. <br />
					- Added support for 360-degree content.
				</li>
				<li>
					Backend: <br />
					- The backend for nTube has been rewritten, resulting much better speed and resource utilization. <br />
					- Added support for YouTube's internal API and also the embedded API.
					<ul>
						<li>Moved over to nullUtil 3.0. (2.7->3.0)</li>
						<li>Moved over to YouTubeExtractor2. (1.0.4.1->2.1.20)</li>
						<li>Moved over to HttpServer 3. (2.1->3.0)</li>
					</ul>
					Signature Decipherer: <br />
					<ul>
						<li>Improved backend, adds support for mobile extraction and for the new UI refresh.</li>
						<li>Added support for the following decipherer backends:</li>
						<ul>
							<li>Graal.js</li>
							<li>BaseJS</li>
							<li>Rhino</li>
							<li>Lua on Java</li>
						</ul>
						<li>Moved from v6 to v8.</li>
						<li>Added multi-threading for the v8 and v9 ciphers.</li>
						<li>Improved the overall processing and detection of ciphers.</li>
						<li>Added launch arguments to control what decipherer backend is used.</li>
						<li>Added support for the v9 cipher.</li>
						<li>Added support for modern versions of Java and non-Nashorn capable JREs.</li>
					</ul>
					Video Extraction: <br />
					<ul>
						<li>Performance has been massively improved over 1.4.x</li>
						<li>Stability of the extractions has been improved, making them more error tolerant.</li>
						<li>Improved endscreen, advanced info extraction.</li>
						<li>Upgraded the comments backend.</li>
						<li>Upgraded the related video extractor.</li>
						<li>Improved handling of playlists and their indexes.</li>
						<li>Added support for 8K AV1, up to 60 fps.</li>
						<li>
							Added support for surround sound.
							<ul>
								<li>Audio sources will show "SURR"</li>
								<li>Audio+Video sources will show "AAC+S"</li>
							</ul>
						</li>
						<li>Added support for 360-degree content.</li>
						<li>Support for extraction from BitChute has been deprecated and will be removed in a future version.</li>
					</ul>
				</li>
				<li>
					nTV and nMusic: <br />
					<ul>
						<li>nTV has been moved into a separate component and will be published as a stable component in a future nTube version.</li>
						<li>nMusic will also be moved into a separate component, although will most likely ship near 1.6's release.</li>
					</ul>
				</li>
				<li>And more! (but you'll have to find it...if you even care)</li>
			</ul>
		</div>
		<center>
			<p>All builds below were during the private beta/alpha.</p>
		</center>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.4.4</h3>
			<center>
				<i>It just wer-[crashes].</i>
			</center>
			<p>
				This is the final private beta build.
				<br />
				This is the final build that uses nullUtil 2.7, HttpServer 2 and YouTubeExtractor 1.0.4-1
			</p>
			<p>Below is the changelog for all release candidates.</p>
			<h4>1.4.4-rc5</h4>
			<ul>
				<li>Subscriptions have been implemented! The only thing left to implement is notifications.</li>
				<li>nPlayer: Updated nPlayer API to 1.1.1. (was 1.1.0)</li>
				<li>nPlayer: Background Playback on Chromium/Chrome based browsers is now supported.</li>
				<li>nPlayer: Fixed an issue where the Player attempts to sync a single video.</li>
				<li>Updated HttpServer to 2.1.</li>
				<li>nTube now supports SSL! (Should be on port 8081 by default!)</li>
				<li>Fast Mode<sup>2</sup>: Updated signature extraction methods.</li>
				<li>Fast Mode<sup>2</sup>: Updated URL extraction methods.</li>
				<li>The select tag now properly is displayed on Chrome/Chromium based browsers.</li>
				<li>Improved mobile support, nPlayer for Mobile is a work in progress for now.</li>
				<li>Channels: Blank videos no longer show up due to an error.</li>
				<li>Channels: Subscriber count will now show up on most channels. (exceptions include VEVO channels)</li>
				<li>Mobile Browsers will now use Fast Mode<sup>2</sup>.</li>
			</ul>
			<i>NOTE to mobile users (currently tested on iOS): You currently are unable to change video quality from the default one. (>720p30)</i>
			<h4>1.4.4-rc4</h4>
			<ul>
				<li>nPlayer: Updated nPlayer API to 1.1.0. (was 1.0.3)</li>
				<li>Implemented Data Saving features.</li>
				<li>Added in-video quality switching. (&prefer now applies only to the default video that is loaded.)</li>
				<li>Updated handling of the args <span style="font-family: monospace">&onlyWebM, &openCodecsOnly, &allowWebM</span>.</li>
				<li>The arguments <span style="font-family: monospace">&no60, &audio</span> will NO LONGER disable Fast Mode based extraction.</li>
				<li>
					Updated Video API to version 1.5.<br />New Features:
					<ul>
						<li>Neater API providing more video information.</li>
						<li>Faster data processing.</li>
						<li>Video quality and audio quality switching.</li>
					</ul>
				</li>
				<li>Video API: The JSON values <span style="font-family: monospace">[videoURL, videoURL60, videoURL60A, use60FPS]</span> have been removed.</li>
			</ul>
			<h4>1.4.4-rc3</h4>
			<ul>
				<li>
					Updated Search API: Nice new features.
					<ul>
						<li>Channel support.</li>
						<li>Playlists are now indicated.</li>
					</ul>
				</li>
				<li>Search API: Some videos should no longer report a duration of 0 seconds.</li>
				<li>Fixed a playback issue with videos that have a source of 'yt_otf'.</li>
				<li>Fixed playlists that repeat due to them having no previous index information.</li>
				<li>The channel page now supports /user/ links.</li>
				<li>Added in-video search, nice.</li>
				<li>Preparation for Video API 1.5.</li>
				<li>Removed legacy subtitle API.</li>
				<li>Fixed CSS error with text colours in list selections. (affected the select tag)</li>
				<li>Reduced network requests amount by 1.</li>
				<li>nTV: Fixed Twitch.tv streaming.</li>
				<li>nTV: Updated API.</li>
				<li>nTV: Twitch.tv now auto refreshes streamer status. (updates every 3 minutes)</li>
				<li>nTV: Updated UI.</li>
				<li>nTV: Added Twitch.tv chat support and placeholders for other streaming services.</li>
				<li>Proxy API: Switched time heavy function with lighter one. <span style="font-family: monospace">[minus(1)-->i.set(i.get()-1)]</span></li>
				<li>YouTube API: Signature decipherers are now cached to reduce network request count. (Caches are refreshed every 30 minutes)</li>
				<li>YouTube API: Added support for alternative signature method provided by YouTube. <span style="font-family: monospace">?lsig=*sig*</span></li>
				<li>YouTube Streaming: Fixed issue with some streams failing to extract.</li>
				<li>Fast Mode<sup>2</sup>: Fixed cases where the sources would lack URLs.</li>
			</ul>
			<i>TOFIX: Chromium seems to disallow embedded twitch chat from accessing storage, breaks loading process.<br /></i>
			<i>TODO: Implement YouTube's hashtag search system.</i>
			<h4>1.4.4-rc2</h4>
			<ul>
				<li>Updated AV1 codec support.</li>
				<li>Added YUV420p10 video colour support. (Currently can be enabled by passing argument &colorYUV420p10, known as yuv420p 10bit colour mode)</li>
				<li>Added 8K + 8K60 support.</li>
				<li>Updated YouTube Extractor backend.</li>
				<li>Updated HttpServer2 backend.</li>
				<li>'Fixed' CORS issues with YouTube livestreams.</li>
				<li>Expanded the subtitle size. (large -> x-large, does NOT apply to embedded videos)</li>
				<li>Added Proxy support to geographically blocked content. (Nice, it works...sometimes)</li>
				<li>Fixed handling of live streaming and geographically censored content.</li>
				<li>(USERSCRIPT PREP) Embed now requires a click to begin extracting, it's to prevent a MILLION requests being sent to YouTube at once.</li>
			</ul>
			<h4>1.4.4-rc1</h4>
			<ul>
				<li>
					Preparation to add ultra low quality support. (3GPP codec support) <br />
					<ul>
						<li>This feature won't be implemented.</li>
					</ul>
				</li>
				<li>
					Preparation to add FFMPEG.js to allow browsers to decode unsupported codecs. (and allow merging videos from nPlayer) <br />
					<ul>
						<li>This feature won't be implemented.</li>
					</ul>
				</li>
				<li>Fixed like and dislike ratios. (A FUCKING SPACE CHARACTER)</li>
				<li>Added privacy mode references.</li>
				<li>Added YouTube embed support, a neat userscript is coming next release candidate.</li>
				<li>Refreshed the 404 page. (VOLUME WARNING)</li>
				<li>Began development on the YouTube Extractor 2 API.</li>
			</ul>
			<h4>1.4.4-rc0/1.4.4-initial</h4>
			<p>The Redesign: Part 2</p>
			<p>TL;DR</p>
			<ul>
				<li>Subtitles are now integrated into the video player itself.</li>
				<li>Added a settings page.</li>
				<li>Fast Mode is now fully implemented. (Massive time reduction)</li>
				<li>
					Features acquired thanks to Fast Mode<sup>2</sup>
					<ul>
						<li>Reduction in loading times (during testing would max out at 2-8s, slow down caused by signature decryption)</li>
					</ul>
				</li>
			</ul>
			<p>Actual Changelog:</p>
			<ul>
				<li>Fixed age restrictions bypass (also supports FastMode2)</li>
				<li>PerfectSync is now the default sync handler.</li>
				<li>Added LiteSync for more "LIDL" (trash) computers.</li>
				<li>
					Signature decryption no longer requires a JavaScript environment. (use --Signatures.useSoftwareJS to enable software decoding) <br />
					(Offers a major/minor time reduction thanks to the JavaScript JVM dependency being removed)
				</li>
				<li>Moved settings that were previously in the video the page to a dedicated page. (Nice...right?)</li>
				<li>Added theming support.</li>
				<li>Added custom font support.</li>
				<li>Previous "nPlayer Sync Engine" handlers are now deprecated but still available.</li>
				<li>Fast Mode now supports ALL videos, this basically kills the old method of extracting videos.</li>
				<li>Removed subtitle option in settings.</li>
				<li>Subtitles are now embed into the browser video player.</li>
				<li>Added references to RSS support. (Subscription support soon.)</li>
				<li>Added references to extended playlist support.</li>
				<li>The nTube backend now supports iWebKit: Secure for communication.</li>
				<li>Added references to nTube Embeds.</li>
				<li>Added references to quality switching.</li>
				<li>Updated to HttpServer 2.1 - Now supports VERY large data transfers via streams.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.4.3.3</h3>
			<p>This is a minor hotfix.</p>
			<ul>
				<li>Updated AV1 media selection.</li>
				<li>Fixed views and tags extraction.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.4.3.2-1</h3>
			<p>
				This update targeted a major redesign of the nTube UI. <br />
				We also attempted to add PerfectSync, a new nPlayer playback method which works quite well. <br />
				It only stutters now if we load content due to "quality" Internet. <br />
			</p>
			<p>Actual Changelog:</p>
			<ul>
				<li>New UI! Attempting to keep old look while try to add some Web 5.0 elements.</li>
				<li>Added references for themes support.</li>
				<li>PerfectSync is now an experimental sync option which works quite well.</li>
				<li>Restricted videos now bypass correctly.</li>
				<li>Improved video selection mode, prefers nPlayer if possible.</li>
				<li>Slight improvements to signature decryption.</li>
				<li>nTV has been removed, for now.</li>
				<li>Added references to nMusic, coming soon.</li>
				<li>Subtitles are now overflow safe.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.4.3.2</h3>
			<ul>
				<li>Added new experimental sync mode (PerfectSync), seems to work much better than the other modes.</li>
				<li>Videos no longer are stuck at 360p for some reason, thanks YouTube for switching to seperate streams.</li>
				<li>Fixed issue with '-' (dashes) in video titles within the channel viewer.</li>
				<li>Updated bypass on restricted videos.</li>
				<li>New signature detector, slightly expensive time wise but much more effective.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.4.3.1</h3>
			<ul>
				<li><s>nTV: Fixed issues regarding CORS. Fixing nTube streaming should follow.</s></li>
				<li>Argument "openCodecsOnly" now supports AV1/AV01 (previously supported WebM only).</li>
				<li>Fixed subtitles within non English locales.</li>
				<li>Add base code for multi-locale subtitle support.</li>
				<li>Reduced YouTube calls to max 1 if no issues occur, reduction in data used.</li>
				<li>New signature decryption method, fixes previous issue with copyrighted content.</li>
				<li>Added AV1/AV01 video encoding support. (force enable it with &av1, else it is automatically done)</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.4.3</h3>
			<ul>
				<li>Upgraded HTTP backend, overall faster.</li>
				<li>Added playlist support. (limited to first ~200 videos)</li>
				<li>Updated Search.</li>
				<li>Added nTV, this is experimental.</li>
				<li>Added experimental country restrictions bypass.</li>
				<li>BitChute links are now auto detected.</li>
				<li>BitChute now shows 'trending' videos.</li>
				<li>Added new settings handler. [Base 64 encoded JSON]</li>
				<li>Fixed faulty video URL verification.</li>
				<li>
					Added subtitles/CC support. (I didn't expect it.) <br />
					<ul>
						<li>Auto generated subtitles are not supported.</li>
						<li>Locked to English for now.</li>
					</ul>
				</li>
				<li>
					Reduced time to load a video by a HUGE amount by sneakily scraping pre generated links. <br />
					<ul>
						<li>NOTE: This is only available for Desktop users as <s>video and audio is separate</s> (Depends on where is the data scraped from).</li>
						<li>NOTE 2: This is only available for a limited amount of videos.</li>
					</ul>
				</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.4.2</h3>
			<ul>
				<li>Possible legacy support added to Internet Explorer users.</li>
				<li>Mobile tweaks added to nTube.</li>
				<li>
					Added HLS player support (mainly for livestreams), this means that HLS.js is used. <br />
					<ul>
						<li>WARNING to Firefox Users: CORB doesn't like Firefox and can fail to load videos, check your JS console.</li>
					</ul>
				</li>
				<li>Bypassed YouTube anti embed feature.</li>
				<li>BitChute flys in! Added experimental bitchute support. Add &bc to the end of the url to try it out!</li>
				<li>Added experimental comment support.</li>
				<li>Added options to download videos and audio.</li>
				<li>Added an error reason on videos not loading (i.e. Country restrictions).</li>
				<li>Videos now show if they are trending currently.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.4.1</h3>
			<ul>
				<li>Added channel viewer.</li>
				<li>Updated 60FPS player to v1.2, performance has improved.</li>
				<li>Added audio only mode to playback.</li>
				<li>Added video descriptions and redirect support.</li>
				<li>Added like and dislike count support.</li>
				<li>Added quality controls.</li>
				<li>Switched base 64 decoder to allow for unicode support.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.4</h3>
			<ul>
				<li>Added home page.</li>
				<li>Added trending section.</li>
				<li>Added search section.</li>
				<li>
					Added 60FPS and 1080p+ video support. (Code Name: 60 FPS Player) <br />
					<ul>
						<li>Later NOTE: This eventually became nPlayer.</li>
					</ul>
				</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.3</h3>
			<ul>
				<li>Added related videos.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.2</h3>
			<ul>
				<li>Added endscreen support to videos.</li>
				<li>Added channel subscriber count information.</li>
			</ul>
		</div>
		<div class="poly-item">
			<h3 style="margin-top: 5px; margin-bottom: 10px">1.1</h3>
			<ul>
				<li>Added 'rating' support to videos.</li>
				<li>Added basic playback settings.</li>
			</ul>
		</div>
		<center>
			<p>End of changelog.</p>
		</center>
		<style id="ntube-custom-css"></style>
		<script>
			function hasSettings() {
				try {
					const y = Settings.load("ntube_settings");
					return y !== null && isJson(y);
				} catch (e) {
					console.error(e);
					return false;
				}
			}
			run_async(function () {
				try {
					nTube.init();
					nTube.initTheming();
				} catch (e) {
					console.error(e);
				}
			});
			run_async(function () {
				if (hasSettings()) {
					console.debug("Loading settings...");
					window.__SETTINGS_OBJECT = Settings.load("ntube_settings");
					if (window.__SETTINGS_OBJECT.appearance.enable_new_look) {
						id("poly-item-css").innerHTML =
							".poly-item {padding-left: 5px; box-shadow: 0 14px 28px rgba(255, 255, 255, 0.08), 0 10px 10px rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.2); margin-bottom: 10px;}";
					}
					if (window.__SETTINGS_OBJECT.appearance.custom_css) {
						try {
							id("ntube-custom-css").innerHTML = base64Decode(window.__SETTINGS_OBJECT.appearance.custom_css);
						} catch (e) {
							console.error(e);
						}
					}
					if (window.__SETTINGS_OBJECT.appearance.use_newer_ui_preset) {
						try {
							id("body-css").innerHTML = "body {background-color: #111111; color: white;}";
						} catch (e) {
							console.error(e);
						}
					}
				}
			});
		</script>
	</body>
</html>
